import { getToken, setToken, removeToken, setTimer } from '@/utils/auth'
import { getUserInfo, login, getUserDetails } from '@/api/user'
import { resetRouter } from '@/router/index'
const state = {
  token: getToken(), // 初始化vuex时，让他在缓存中读取token
  UserInfo: {}
}
const mutations = {
  settoken(state, payload) {
    state.token = payload // vuex数据变化
    setToken(payload) //  缓存 更新的 token 数据
  },
  removetoken(state) {
    state.token = null // 移除vuex的token
    removeToken() // 移除 缓存 的数据
  },
  setUserInfo(state, payload) {
    state.UserInfo = payload
  },
  removeUserInfo(state) {
    state.UserInfo = {}
  }
}
const actions = {
  // 发请求获取登录 token 并且存在vuex中
  async login(context, data) {
    // 发送请求 获取token
    // console.log(data)
    const res = await login(data)
    // console.log(res)
    // 设置 token 到vuex中 并且存在cookise里面
    context.commit('settoken', res)
    // 拿到token 并且设置拿到token的时间戳
    setTimer()
  },

  // 获取用户信息 存在vuex中
  async getUserInfo(context) {
    const res = await getUserInfo()
    // console.log(res)
    // 获取员工的基本信息  这里需要用到里面的图片
    const details = await getUserDetails(res.userId)
    // console.log(details)
    context.commit('setUserInfo', { ...res, ...details })
    return res
  },

  // 退出登录
  logout(context) {
    // 删除token
    context.commit('removetoken')
    // 删除用户资料
    context.commit('removeUserInfo')
    // 重置路由
    resetRouter()
    // {root:true}  子模块可以调用父级模块下的其他子模块的 mutations
    context.commit('permission/setRoutes', [], { root: true }) // 重新设置路由
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

